setUp 函数
setUp 函数的作用就是为 Composition API 在组件中使用提供入口。意思就是你要使用 Composition API,在组件中必须提供 setUp 函数。
setUp 函数使用方式如下
<template>
<div>
<button @click="increment">
{{target.name}} tapped {{times}} times
</button>
</div>
</template>
<script>
import { createComponent, ref, reactive } from '@vue/composition-api'
export default createComponent({
// 组件被创建时setUp函数被调用
setup() {
let times = ref(0)
let target = reactive({
name: 'Button'
})
const increment = () => {
times.value++
}
//把属性暴露给template
return {
times,
target,
increment
}
}
})
</script>
setup(props, context) 的参数
props 对象
- 想要在 setUp 内访问到组件的 props,必须在它参数的第 1 个位置提供 props 参数。如下:
<script>
import { createComponent } from '@vue/composition-api'
export default createComponent({
props: {
greet: {
type: String,
default: 'Hello Vue3!'
}
},
setup(props) {
console.log(props.greet) //输出 'Hello Vue3!'
}
})
</script>
context 对象
- 在 composition API 里不再提供 this,而是换成了 context 对象,里面包含了在 2.x APIs 的 this 所拥有的属性,它被作为 setUp 的第二个参数。
<script>
import { createComponent } from '@vue/composition-api'
export default createComponent({
setup(props, context) {
context.attrs
context.slots
context.parent
context.root
context.emit
}
})
</script>
- 实际案例如下:
<script>
import { createComponent } from '@vue/composition-api'
export default createComponent({
setup(props, context) {
context.root.$on('test', function(msg) {
console.log(msg) // 'hi'
})
context.root.$emit('test', 'hi')
}
})
</script>